package com.example.kotlindemo

import com.example.kotlindemo.kuozhanhanshu.forceshi
import com.example.kotlindemo.kuozhanhanshu.isvalue
import com.example.kotlindemo.kuozhanhanshu.leeterCount
import com.example.kotlindemo.title_utils.Danli
import java.lang.Exception
import java.lang.IllegalArgumentException

/**
 * @author Lmy
 * @功能:
 * @Creat 2020/5/13 21:45
 * @Compony 永远相信美好的事物即将发生
 */


fun main() {

    var kotlindata: kotlinBean
    kotlindata = kotlinBean("男", 1)
    kotlindata.age = 100
    kotlindata.age = 100

    print("${kotlindata.name + kotlindata.sex + kotlindata.age}\n")
    val list = listOf(1, 21, 3, 12, 92, 0, 12112, 31)
//    这个 return 表达式从最直接包围它的函数即 main 中返回。
    list.forEach {
        if (it == 0) return@forEach//加上返回标签 一般常用隐式标签和lambda的函数同名
        print("$it ")  //这里的it指代被遍历的list中的值
    }
    print("\n如果是return这里不会执行 加上标签即可执行")


//   loopfor()
//    stringdemo()
//    booledemo()
    //    getResult(Ok("hahah"))
//    Danli.danli("测试单例类")
//    dosmosing()
//    kuozhanhanshu.lettersCount("ANDJS%%327")
//    forceshi()
//    isvalue()
//    val c = 'a'
//    print(c.toInt())//输出ASCII码为97
    Test().setInterface(object : Test.TestInterface {
        override fun test() {

        }
    })

}


class Test() {
    var v = "成员变量"

    fun setInterface(test: TestInterface) {
        test.test()
    }

    interface TestInterface {
        fun test()
    }
}


fun booledemo() {
    val a = true
    val b = false
    print(!a || b)
//    val count = "ANDJS%%327".leeterCount()
//    print("String扩展函数结果$count")
    val items = setOf("apple", "banana", "kiwi")
    //when 相当于switch case break
    when {
        "banana" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}

fun stringdemo() {
    val str = "ABDNCJSSL"
    print("\n" + str[0])//可以使用[]轻松获取字符串中的某个字符输出结果为A
    //还可以直接使用for循环遍历语法如下
    for (s in str) {
        print(s)
    }

//    Kotlin 支持三个引号 """ 扩起来的字符串，支持多行字符串，比如：
    //String 可以通过 trimMargin() 方法来删除多余的空白。
    val text = """
    |多行字符串
    |多行字符串
    """
    println(text)   // 输出有一些前置空格

    val text2 = """
    |多行字符串
    |菜鸟教程
    |多行字符串
    |Runoob
    """.trimMargin()
    //默认 | 用作边界前缀，但你可以选择其他字符并作为参数传入，比如 trimMargin(">")。
    println(text2)    // 前置空格删除了
}

fun loopfor() {
    /**
     *
     * break会跳出当前循环 回到外层循环继续遍历
     *这里loop的意思是将break跳出循环 同步到外层的循环当中
     */
    loop@ for (i in 1..10) {
        print("外层循环$i\n")
        for (j in 1..10) {
            print("内层循环$j\n")

            if (j == 3) {
                print("内层循环break\n")
                break@loop
            }
        }
    }
    print("结束循环")
}

fun getResult(result: Result) = when (result) {
    is Ok -> result.msg
    is Error -> result.error
    is Un -> result.msg
}

sealed class Result

class Ok(val msg: String) : Result()
class Error(val error: Exception) : Result()
class Un(val msg: String) : Result()
